package com.castle.fortress.admin.study.exam.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.member.dto.MemberDto;
import com.castle.fortress.admin.study.exam.entity.StudyExamEntity;
import com.castle.fortress.admin.study.exam.dto.StudyExamDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.castle.fortress.admin.system.entity.SysUser;

import java.util.Map;
import java.util.List;

/**
 * 试卷管理 服务类
 *
 * @author castle
 * @since 2023-02-10
 */
public interface StudyExamService extends IService<StudyExamEntity> {

    /**
     * 分页展示试卷管理列表
     * @param page
     * @param studyExamDto
     * @return
     */
    IPage<StudyExamDto> pageStudyExam(Page<StudyExamDto> page, StudyExamDto studyExamDto);

    /**
    * 分页展示试卷管理扩展列表
    * @param page
    * @param studyExamDto
    * @return
    */
    IPage<StudyExamDto> pageStudyExamExtends(Page<StudyExamDto> page, StudyExamDto studyExamDto);
    IPage<StudyExamDto> pageStudyExamExtendsApi(Page<StudyExamDto> page, StudyExamDto studyExamDto);
    /**
    * 试卷管理扩展详情
    * @param id 试卷管理id
    * @return
    */
    StudyExamDto getByIdExtends(Long id);

    /**
     * 展示试卷管理列表
     * @param studyExamDto
     * @return
     */
    List<StudyExamDto> listStudyExam(StudyExamDto studyExamDto);

    /**
     * 修改试卷状态
     * @param id
     * @param code
     */
    void updateStatus(Long id, Integer code);

    /**
     * 分页展示指定会员的待考试卷列表
     * @param page
     * @param memberId
     * @return
     */
    IPage<StudyExamDto> unanswered(Page<StudyExamDto> page, Long memberId);

    /**
     * 待提醒列表
     * @param memberId
     * @return
     */
    List<StudyExamDto> toRemindList(Long memberId);

    /**
     * 分页展示指定会员已答的试卷列表
     * @param page
     * @param memberId
     * @return
     */
    IPage<StudyExamDto> answeredExams(Page<StudyExamDto> page, Long memberId);

    /**
     * 更新考试状态定时任务
     */
    void updateExamStatusJob();

    IPage<StudyExamDto> endTheExams(Page<StudyExamDto> page, Long id);

    /**
     * 删除会员与该试卷相关的信息
     * @param ids
     */
    void delExamMemberData(List<Long> ids);

    StudyExamDto getByIdExamNum(Long id);
}
